#include <stdio.h>
#include <string.h>
#include <stdbool.h>

//345. 反转字符串中的元音字母
//给你一个字符串 s ，仅反转字符串中的所有元音字母，并返回结果字符串。
//元音字母包括 'a'、'e'、'i'、'o'、'u'，且可能以大小写两种形式出现不止一次。


bool isVowel (char c) {
    return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || 
           c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U';
}

char* reverseVowels(char* s) {
    int n = strlen(s), l = 0, r = n - 1;
    while (true) {
        while (l <  n && !isVowel(s[l])) ++ l;
        while (r >= 0 && !isVowel(s[r])) -- r;
        if (l < r) {s[l] ^= s[r]; s[r] ^= s[l]; s[l ++] ^= s[r --]; }
        else return s;
    }
}


// char* reverseVowels(char* s) 
// {
//     int left = 0;
//     int right = strlen(s)-1;
//     while(left < right)
//     {
//         while(left < right && (s[left] != 'a' && s[left] != 'e' && s[left] != 'i' && s[left] != 'o' && s[left] != 'u') || (s[left] != 'A' && s[left] != 'E' && s[left] != 'I' && s[left] != 'O' && s[left] != 'U'))
//         {
//             left++;
//         }
//         while(left < right && (s[right] != 'a' && s[right] != 'e' && s[right] != 'i' && s[right] != 'o' && s[right] != 'u') || (s[right] != 'A' && s[right] != 'E' && s[right] != 'I' && s[right] != 'O' && s[right] != 'U'))
//         {
//             right--;
//         }
//         if(left < right)
//         {
//             char temp = s[left];
//             s[left] = s[right];
//             s[right] = temp;
//         }
//         left++;
//         right--;
//     }
//     return s;
// }
